package org.zoomdev.zoom.aop;

/**
 * 使用场景如下：
 * <p>
 * 比如一个对接某系统的http接口,可以将调用规则写在ProxyObject中
 * 而method上定义 annotation， 这样可以根据 annotation获取不同的参数，比如接口名称、接口参数、接口规则等等信息
 */
public interface ProxyFactory {
    /**
     * 动态代理 接口或者抽象类，抽象类不能有构造参数，否则系统并不知道如何构造本类的实例
     *
     * @param interfaceOrAbstractClass
     * @param object
     * @return
     */
    <T> T createObject(Class<T> interfaceOrAbstractClass, ProxyObject object);

    /**
     * @param interfaceOrAbstractClass
     * @return
     */
    Class createClass(Class interfaceOrAbstractClass);

}
